home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Suicid 3
/
Suicid - Issue 3 (1992-11)(Energy).adf
/
Diskmag.S
< prev
next >
Wrap
Text File
|
1991-10-16
|
72KB
|
3,743 lines
org$15000
load$15000
Derrel:
; -------------------------------------------------------------------
; -------------------------------------------------------------------
; Versuchstext ausschalten
; Dsk_Start, Dsk_end und Fi_laden einschalten
; In `DELAYER` steht Verzögerungszeit für Menuscrolling
; -------------------------------------------------------------------
; -------------------------------------------------------------------
DMACON = $DFF096 ; DMA-CONTROLLREGISTER
DMACONR= $02 ; DMA-CONTROLLREGISTER LESEN
INTENAR = $DFF01C ; INTERRUPTENABLE-REGISTER LESEN
INTREQ = $DFF09C ; INTERRUPTANFORDERUNG
INTREQR = $DFF01E ; INTERRUPTANFORDERUNG LESEN
; -------------------------------------------------------------------
BLTCON0= $40 ; BLITTERCONTROLLREGISTER 0
BLTCON1= $42 ; BLITTERCONTROLLREGISTER 1
BLTAFWM= $44 ; MASKE ERSTES WORT
BLTALWM= $46 ; MASKE LSTZTES WORT
BLTCPTH= $48 ; STARTADRESSE BLITVORGANG QUELLE C
BLTCPTL= $4A
BLTBPTH= $4C ; STARTADRESSE BLITVORGANG QUELLE B
BLTBPTL= $4E
BLTAPTH= $50 ; STARTADRESSE BLITVORGANG QUELLE A
BLTAPTL= $52
BLTDPTH= $54 ; STARTADRESSE BLITVORGANG ZIEL D
BLTDPTL= $56
BLTSIZE= $58 ; BLITFENSTERGROESSE
BLTCMOD= $60 ; MODULOWERT QUELLE C
BLTBMOD= $62 ; MODULOWERT QUELLE B
BLTAMOD= $64 ; MODULOWERT QUELLE A
BLTDMOD= $66 ; MODULOWERT ZIEL D
COPLST2= $84
; -------------------------------------------------------------------
; -------------------------------------------------------------------
move.w #$4000,$dff09a
MOVE.L #COPPERLISTE,$dff084
bset #1,$bfe001
; -------------------------------------------------------------------
; --- Neues Interrupt -----------------
; -------------------------------------
move.w $dff01c,d0
ori #$8000,d0
move d0,intena
move #$7fff,$dff09a
move.l 104,Vector2
move.l 108,Vector3
move.l #Inkey,104
move.l #Interrupt,108
move.w #$c028,$dff09a
; ---------------------------------
MOVE.W #%1000011111010000,DMACON
; MOVE.W #%0000010000100000,DMACON
; -------------------------------------------------------------------
move.l #0,a0
move.l #0,a1
move.l #0,a2
move.l #0,a3
move.l #0,a4
move.l #0,a5
move.l #0,a6
move.l #0,d0
move.l #0,d1
move.l #0,d2
move.l #0,d3
move.l #0,d4
move.l #0,d5
move.l #0,d6
move.l #0,d7
; -------------------------------------------------------------------
; --- Sprite-Zeiger positionieren -----
; -------------------------------------
move.w #127,SpriteX
move.w #250,SpriteY
move.b #00,Aussteigen
move.b #0,Nicht_gefunden
move.l #0,NSeite
; -------------------------------------
; --- Init für Artikelnummereingabe ---
; -------------------------------------
move.l #0,Stelle
move.l #101,Waiter
bclr #0,Einmal
bclr #1,Einmal
bclr #2,Einmal
lea Hl_Name,a0
move.b #"0",6(a0)
move.b #"0",7(a0)
move.b #"1",8(a0)
bsr.w Artikel_Zahl
; -------------------------------------
; -------------------------------------------------------------------
; --- Maße des Menuscreens ------------
; -------------------------------------
Breite = 640
Hoehe = 67
Planes = 4
Farben = 16
bs = Breite/8*Hoehe
Farblaenge = Farben*2
; -------------------------------------------------------------------
; --- Initialisierungen ---------------
; -------------------------------------
move.b #0,MGd_G
bset #0,Wahl
bclr #0,MenuUntenMaus
move.b #0,NichtBL
jsr mt_init
move.l #Interrupt,$6c
move.l #Copperliste,$dff084
jsr ClearScreen ; Textscreen
move.l #Screen,d0
move.l #00,AddBitPl
move.w #$00,$dff102
bsr M_init_bitplanes
jsr init_bitplanes ; Menuscreen
jsr color1
jsr ClearScreen
movem.l d0-d7/a0-a6,-(a7)
jsr Dsk_Start
movem.l (a7)+,d0-d7/a0-a6
; -------------------------------------------------------------------
; --- SpriteDatas in Copperliste eintragen ---
; --------------------------------------------
lea Sprites,a0
move.l #SpriteData,d0
add.l #6,a0
move.w d0,(a0)
sub.l #4,a0
swap d0
move.w d0,(a0)
jsr D_MausAbfrage ; Mauszeiger gleich richtig setzen
; -------------------------------------------------------------------
; --- LOOOP: Hier laufen alle Mausabfragen ohne Interrupt ---
; -----------------------------------------------------------
move.l #10,Delayer
bset #1,MGd_G
bset #0,MenuUntenMaus
move.w #32800,dmacon
LOOOP:
btst #0,Wahl
beq.w M_Abfrage
Nicht_Menu:
btst #0,MenuUntenMaus
bne.s D_M_Nicht
jsr D_MausAbfrage
D_M_Nicht:
btst #0,Aussteigen
bne.s RuptEin
btst #0,MGd_G
bne.s MG_Laden
After_MG_L:
btst #1,MGd_G
bne.s Init_Menu
After_I_M:
; btst #10,$dff016 ; Sicherheitsausgang
bra.s LOOOP
; bra.s RuptEin
; -----------------------------------
MG_Laden:
bsr.w MGd_Gewaehlt
bra.s After_MG_L
Init_Menu:
jsr Make_Menu
bra.s After_I_M
; -------------------------------------------------------------------
; --- Interrupts wiederherstellen ----
; ------------------------------------
RuptEin:
move.w #$7fff,$dff09a
move.l Vector2,104
move.l Vector3,108
move.w intena,$dff09a
bsr.w Dsk_end
jsr mt_end
move.l #0,d0
move.l #0,d1
bclr #1,$bfe001
rts
; --------------------------------
Intena: dc.l 0
Vector2: dc.l 0
Vector3: dc.l 0
KeyFl: dc.b 0
KeyCode: dc.b 0
even
RuptReg: dc.w 0
Rupt6c: dc.l 0
NSeite: dc.l 0
Blaettern: dc.b 0
even
; --------------------------------
; -------------------------------------------------------------------
; --- Neues Interrupt -----------------
; -------------------------------------
Interrupt:
movem.l d0-d7/a0-a6,-(a7)
btst #0,MenuUntenMaus
bne.s R_A_Nicht
jsr Restaurieren
bsr.w Abfrage
bsr.w Tasten
R_A_Nicht:
btst #0,IsMusic
bne.w No
movem.l d0-d7/a0-a6,-(a7)
jsr Mt_Music
movem.l (a7)+,d0-d7/a0-a6
No:
bsr.w Time
bsr.w Seite
; bchg #1,$bfe001
movem.l (a7)+,d0-d7/a0-a6
move.w #$0020,intreq
bclr #0,KeyFl
move.b #0,KeyCode
rte
; ---------------------------------
Inkey:
movem.l d0-d7/a0-a6,-(a7)
move #8,$dff09c ; Interruptrequestbit
btst #3,$bfed01
bne.s Inkey2
move.b $bfec01,d0
ror.b #1,d0
eori.b #$ff,d0
bmi.w inkey1
bset #0,Keyfl
move.b d0,KeyCode
; ---------------------------------
Inkey1:
move.b #$ff,$bfec01
bset #6,$bfee01
bclr #6,$bfee01
Inkey2:
move.b $bfed01,d0
movem.l (a7)+,d0-d7/a0-a6
bchg #1,$bfe001
rte
; ---------------------------------
; ----------------------
MGd_G: dc.b 0
even
; -----------------------------------------------
; --- Artikelnummerneingabe über 10er Block -----
; -----------------------------------------------
Tasten: bsr.w WelcheTa
cmp.l #1,Stelle
beq.s Einer ; Einerstelle beschreiben
cmp.l #2,Stelle
beq.s Zehner ; Einer nach Zehner; Einer neu beschreiben
cmp.l #3,Stelle
beq.s Hunderter ; Ein. nach Zeh.; Zeh. nach Hund.; Einer neu
cmp.l #3,Stelle
bgt.w Enter ; Nach 3 Zahlen kann man noch mit DEL löschen,
rts ; 4.Taste ist autom. ENTER
; -----------------------------------------------
Einer:
btst #2,Einmal
bne.s Nicht_Einer
lea Hl_Name(pc),a0
move.l d1,d2
add.l #48,d2
move.b d2,8(a0)
; move.b #48,8(a0)
bset #2,Einmal
bsr.w Artikel_Zahl
Nicht_Einer:
rts
Zehner:
btst #0,Einmal
bne.s Nicht_Zehner
lea Hl_Name(pc),a0
move.b 8(a0),7(a0)
move.l d1,d2
add.l #48,d2
move.b d2,8(a0)
bset #0,Einmal
bsr.w Artikel_Zahl
Nicht_Zehner:
rts
Hunderter:
btst #1,Einmal
bne.s Nicht_Hunderter
lea Hl_Name(pc),a0
move.b 7(a0),6(a0)
move.b 8(a0),7(a0)
move.l d1,d2
add.l #48,d2
move.b d2,8(a0)
bset #1,Einmal
bsr.w Artikel_Zahl
Nicht_Hunderter:
rts
Enter: ; Angaben OK -> Artikel laden
; move.b #$0f0,$dff180
; bclr #1,$bfe001
move.l #0,Stelle
bclr #0,Einmal
bclr #1,Einmal
bclr #2,Einmal
bset #0,MGd_G
bset #0,MenuUntenMaus
lea Hl_Name(pc),a0
move.l #0,d0
move.l #0,d1
move.l #0,d2
move.b 6(a0),d0
move.b 7(a0),d1
move.b 8(a0),d2
sub.b #$30,d0
sub.b #$30,d1
sub.b #$30,d2
mulu #100,d0
mulu #10,d1
add.l d2,d0
add.l d1,d0
move.l #2,d1
cmp.l d1,d0
blt.s Artikel000
move.l AnzArt,d1
cmp.l d1,d0
bgt.s COlor
rts
COlor:
move.l AnzArt,d0
add.l #1,d0
bra.w Init_Art
Artikel000:
; move.w #$f0f,$dff180
move.l #001,d0
bra.w Init_Art
;-----------------------------------------------
WelcheTa:
btst #0,KeyFl
beq.w Nix_da
; ---------------------------------
cmp.b #$1d,KeyCode
beq.w Eins
cmp.b #$1e,KeyCode
beq.w Zwei
cmp.b #$1f,KeyCode
beq.w Drei
cmp.b #$2d,KeyCode
beq.w Vier
cmp.b #$2e,KeyCode
beq.w Fuenf
cmp.b #$2f,KeyCode
beq.w Sechs
cmp.b #$3d,KeyCode
beq.w Sieben
cmp.b #$3e,KeyCode
beq.w Acht
cmp.b #$3f,KeyCode
beq.w Neun
cmp.b #$0f,KeyCode
beq.w Null
cmp.b #$46,KeyCode ; löscht alles Eingegebene (Delete)
beq.w Neuer_Anfang
cmp.b #$43,KeyCode ; Eingabe abgeschlossen (Enter)
beq.w Enter
cmp.b #$4c,KeyCode ; Softscrolling nach oben
beq.w PfeilOben
cmp.b #$4d,KeyCode ; Softscrolling nach unten
beq.w PfeilUnten
cmp.b #$4e,KeyCode ; Plus 1 Artikel
beq.w PfeilRechts
cmp.b #$4f,KeyCode ; Minus 1 Artikel
beq.w PfeilLinks
cmp.b #$5f,KeyCode ; Menu anfordern
beq.w Menu_Will
cmp.b #$45,KeyCode ; Aussteigen !!!!!
beq.w Weg_da
bclr #0,KeyFl
move.b #0,KeyCode
Nix_da:
rts
;-----------------------------------------------
Eins: move.l #1,d1
bra.s Allgemein
Zwei: move.l #2,d1
bra.s Allgemein
Drei: move.l #3,d1
bra.s Allgemein
Vier: move.l #4,d1
bra.s Allgemein
Fuenf: move.l #5,d1
bra.s Allgemein
Sechs: move.l #6,d1
bra.s Allgemein
Sieben: move.l #7,d1
bra.s Allgemein
Acht: move.l #8,d1
bra.s Allgemein
Neun: move.l #9,d1
bra.w Allgemein
Null: move.l #0,d1
bra.w Allgemein
Allgemein:
add.l #1,Stelle
move.b #0,KeyCode
bclr #0,KeyFl
rts
; ------------------------------------
PfeilOben:
move.l #42,BobOffset
jsr Put
move.l #72,Welche
jsr Copy_Message
move.l AddBitPl,d0
cmp.l #1,d0
blt.s PFComment4
cmp.l #0,AddBitPl
blt.s PfeilO
sub.l #400,AddBitPl
move.l #Screen,d0
bsr M_init_bitplanes
PfeilO:
rts
PfComment4:
move.l #336,Welche
jsr Copy_Message
move.l #00,AddBitPl
move.l #Screen,d0
bsr M_init_bitplanes
bra.s PfeilO
; ------------------------------------
PfeilUnten:
move.l #52,BobOffset
jsr Put
move.l #96,Welche
jsr Copy_Message
move.l AddBitPl,d0
move.l MerkEnde,d1
sub.l #16000,d1
cmp.l d1,d0
bgt.s PFComment5
add.l #400,AddBitPl
move.l #Screen,d0
bsr M_init_bitplanes
PfeilU:
rts
PFComment5:
move.l #360,Welche
jsr Copy_Message
bra.s PfeilU
; ------------------------------------
PfeilLinks:
move.l #12,BobOffset
jsr Put
move.l #0,Welche
jsr Copy_Message
bclr #0,SubAdd
bset #0,MGd_G
bset #0,MenuUntenMaus
jsr Suicid
rts
; ------------------------------------
SubAdd: dc.b 0
even
; ------------------------------------
PfeilRechts:
move.l #22,BobOffset
jsr Put
move.l #24,Welche
jsr Copy_Message
bset #0,SubAdd
bset #0,MGd_G
bset #0,MenuUntenMaus
jsr Suicid
rts
; ------------------------------------
Menu_Will:
bset #1,MGd_G
bset #0,MenuUntenMaus
move.l #1,d0
bsr.w Init_Art
rts
; ------------------------------------
Weg_da:
bset #0,Aussteigen
rts
; ------------------------------------
;-----------------------------------------------
Neuer_Anfang:
move.l #0,Stelle
bsr.w Artikel_Zahl
lea Hl_Name(pc),a0
move.b #"0",6(a0)
move.b #"0",7(a0)
move.b #"1",8(a0)
bclr #0,Einmal
bclr #1,Einmal
bclr #2,Einmal
; bclr #1,$bfe001
rts
;----------------------------------
Stelle: dc.l 0
Waiter: dc.l 0
Einmal: dc.b 0
even
;----------------------------------
;----------------------------------------------------------------------
;--- Artikel gewählt -> ausblenden & laden & Artikelnummer kopieren ---
;----------------------------------------------------------------------
M_Gewaehlt:
bsr.w Ausblenden
move.l #HL_page,HL_dest ; Zieladresse in HL_dest !!!!!!
bsr.w Fi_Laden ; Hl_Name
bsr Lade_Message
btst #0,Nicht_gefunden
bne.s Nicht_da1
movem.l d0-d7/a0-a6,-(a7)
jsr ClearScreen
move.l #HL_Page,Source
move.l #Screen,Destin
add.l #80,Destin
jsr Write
movem.l (a7)+,d0-d7/a0-a6
;---------------------------------------
move.l MerkEnde,d0
divu #400,d0
and.l #$0000ffff,d0
addq.l #1,d0
mulu #400,d0
move.l d0,MerkEnde
;---------------------------------------
move.l #Screen,d0
move.l #00,AddBitPl
bsr M_init_bitplanes
Nicht_da1:
bsr.w EinblendenText
bset #0,Wahl ; Abfrage des Bitplanescrollings
; deaktivieren
bclr #0,MenuUntenMaus ; Mausabfrage unten einschalten
bsr.w Artikel_Zahl
move.l #288,Welche
bsr.w Copy_Message
rts
;-----------------------
Nicht_gefunden: dc.b 0
even
;-----------------------
;------------------------------------------------------------------------------
;--- Artikel mit Gadget gewählt -> ausblenden & laden & Artikelnr. kopieren ---
;------------------------------------------------------------------------------
MGd_Gewaehlt:
btst #0,NichtBL
bne.w ExtremArtikel
bsr.w AusblendenText
move.l #HL_page,HL_dest ; Zieladresse in HL_dest !!!!!!
bsr.w Fi_Laden ; Hl_Name
bsr Lade_Message
btst #0,Nicht_gefunden
bne.s Nicht_da2
movem.l d0-d7/a0-a6,-(a7)
jsr ClearScreen
move.l #HL_Page,Source
move.l #Screen,Destin
add.l #80,Destin
jsr Write
movem.l (a7)+,d0-d7/a0-a6
;---------------------------------------
move.l MerkEnde,d0
divu #400,d0
and.l #$0000ffff,d0
addq.l #1,d0
mulu #400,d0
move.l d0,MerkEnde
;---------------------------------------
move.l #Screen,d0
move.l #00,AddBitPl
bsr M_init_bitplanes
Nicht_da2:
bsr.w EinblendenText
bset #0,Wahl ; Abfrage des Bitplanescrollings
; deaktivieren
bclr #0,MenuUntenMaus ; Mausabfrage unten einschalten
bsr.s Artikel_Zahl
move.l #288,Welche
bsr.w Copy_Message
bclr #0,MGd_G
rts
ExtremArtikel:
bclr #0,NichtBL
bset #0,MGd_G
bclr #0,MGd_G
; deaktivieren
bclr #0,MenuUntenMaus ; Mausabfrage unten einschalten
; bsr.s Artikel_Zahl
move.l #312,Welche
bsr.w Copy_Message
; move.w #$00f,$dff180
rts
;------------------------------------------------------------------------------
;--- Artikelnummer in Screen kopieren -----------------------------------------
;------------------------------------------------------------------------------
Artikel_Zahl:
lea Hl_name(pc),a2
move.l #0,d0
move.l #0,d1
move.l #0,d2
move.b 6(a2),d0
move.b 7(a2),d1
move.b 8(a2),d2
sub.b #33,d0
sub.b #33,d1
sub.b #33,d2
lea Menu,a0 ; 1.Artikel Zahl (Hunderter)
add.l #4200,a0
lea Font2,a1
add.l d0,a1
bsr.w Copy_Zahl
lea Menu,a0 ; 2.Artikel Zahl (Zehner)
add.l #4201,a0
lea Font2,a1
add.l d1,a1
bsr.w Copy_Zahl
lea Menu,a0 ; 3.Artikel Zahl (Einer)
add.l #4202,a0
lea Font2,a1
add.l d2,a1
bsr.w Copy_Zahl
rts
;------------------------------------------------------------------------------
;--- Seite ausrechnen und Zahl in Screen kopieren -----------------------------
;------------------------------------------------------------------------------
S_Zahl: dc.l 0
;----------------------------------
Seite:
move.l #16000,S_Zahl
move.l AddBitPl,d1
add.l d1,S_Zahl
move.l S_Zahl,d0
divu #16000,d0
move.l #0,d4
move.b d0,d4
; move.b #136,d4
move.l #0,d0
move.l #0,d1
move.l #0,d2
divu #10,d4
swap d4
move.b d4,d2 ; Einer
swap d4
and.l #$0000ffff,d4
divu #10,d4
move.b d4,d0 ; Hunderter
swap d4
move.b d4,d1 ; Zehner
add.b #15,d0
add.b #15,d1
add.b #15,d2
lea Menu,a0 ; 1.Artikel Zahl (Hunderter)
add.l #4209,a0
lea Font2,a1
add.l d0,a1
bsr.w Copy_Zahl
lea Menu,a0 ; 2.Artikel Zahl (Zehner)
add.l #4210,a0
lea Font2,a1
add.l d1,a1
bsr.w Copy_Zahl
lea Menu,a0 ; 3.Artikel Zahl (Einer)
add.l #4211,a0
lea Font2,a1
add.l d2,a1
bsr.w Copy_Zahl
rts
;--------------------------------------------------------
;--- Hardware File Loader -------------------------------
;--------------------------------------------------------
HL_namelength=9
Lade_Message:
btst #0,Nicht_gefunden
beq.s NeinS
bra.s Ja
NeinS:
move.l #240,Welche
bsr.w Copy_Message
rts
Ja:
move.l #264,Welche
bsr.w Copy_Message
rts
; ----------------------------------------------------------------
; ----------------------------------------------------------------
; bsr.s Write
; ----------------------------------------------------------------
Source: dc.l 0
Destin: dc.l 0
; ----------------------------------------------------------------
Write:
move.l #-2,Wort
move.l #0,ZeichenCounter
move.l #0,WeiterText
move.b #0,SpaceTwo
Naechster:
btst #0,SpaceTwo
beq.w AddWort2
move.l Source,a3
move.l #0,d0
move.l #0,d1
add.l WeiterText,a3
move.b (a3)+,d0
move.b (a3)+,d1
add.l #2,WeiterText
addq.l #1,ZeichenCounter
cmp.l #42,ZeichenCounter
bgt.s AddWort
AfterWort:
cmp.b #-1,d0
beq.w Fertig
cmp.b #-1,d1
beq.w Fertig
cmp.b #10,d0 ; Return
beq.w AddWort2.1
cmp.b #10,d1
beq.w TwoSpace2
cmp.b #9,d0 ; Tabulator
beq.w Tab1
cmp.b #9,d1
beq.w Tab
cmp.b #32,d0
beq.w Space1
AfterSpace1:
cmp.b #32,d1
beq.w TwoSpace
AfterSpace2:
sub.l #33,d0
sub.l #33,d1
add.l #2,Wort ; Mit Blitter 1 Wort weiter
Los:
move.l d0,d2
divu #2,d2
swap d2
and.l #$0000ffff,d2
tst.w d2
bne.w Zahl1Gerade
beq.w Zahl1Ungerade
; ----------------------------------------------------------------
; ----- Zweite Byte ist ein Space -----
TwoSpace2:
bchg #0,SpaceTwo
TwoSpace:
bsr.w Space2
bra.s Los
; ----------------------------------------------------------------
AddWort:
add.l #720,Wort
move.l #1,ZeichenCounter
add.l #0,WeiterText
bra.w Naechster
AddWort2.1:
sub.l #1,WeiterText
bra.s AddW
AddWort2:
bset #0,SpaceTwo
AddW: add.l #720,Wort
move.l #1,ZeichenCounter
move.l Wort,d0
move.l d0,d1
divu #80,d0
and.l #$0000ffff,d0
add.l #1,d0
mulu #80,d0
sub.l d1,d0
add.l d0,Wort
sub.l #2,Wort
bra.w Naechster
Tab1:
sub.l #1,WeiterText
Tab:
add.l #8,Wort
bra.w Naechster
; ----------------------------------------------------------------
ZeichenCounter: dc.l 0
WeiterText: dc.l 0
SpaceTwo: dc.b 0
even
; ----------------------------------------------------------------
Space1:
move.l #61,d0
add.l #2,Wort
cmp.b #32,d1
beq.w Space3
sub.l #33,d1
bra.w Los
Space3:
move.l #61,d1
bra.w Los
Space2:
sub.l #33,d0
move.l #61,d1
add.l #2,Wort
rts
; ----------------------------------------------------------------
; ----------------------------------------------------------------
; ----------------------------------------------------------------
; --- Zahl 1 ist ungerade ----------------------------------------
; ----------------------------------------------------------------
; ----------------------------------------------------------------
Zahl1Ungerade:
move.l d1,d2
divu #2,d2
swap d2
and.l #$0000ffff,d2
tst.w d2
bne.w Zahl2Gerade1
beq.w Zahl2Ungerade1
; --------------------------------------------
; --- Zahl 1 ungerade; Zahl 2 ist gerade -----
; --------------------------------------------
Zahl2Gerade1:
move.l d0,FontOffset2
lea $dff000,a6
move.w #1,d7
lea Font,a0
move.l Destin,a1
add.l FontOffset2,a0
add.l Wort,a1
CopyZG1:
move.l a0,bltapth(a6)
move.l a1,bltdpth(a6)
move.l #$ffffff00,bltafwm(a6)
move.w #92,bltamod(a6)
move.w #78,bltdmod(a6)
clr.w bltcon1(a6)
move.w #$09f0,bltcon0(a6)
move.w #9*64+1,bltsize(a6)
BltZG1:
btst #14,dmaconr(a6)
bne.s BltZG1
add.l #846,a0
add.l #M_bs,a1
dbra d7,CopyZG1
; --------------------------------------------
move.l d1,FontOffset2
lea $dff000,a6
move.w #1,d7
lea Font2,a0
lea Font,a1
move.l Destin,a2
add.l FontOffset2,a0
add.l FontOffset2,a1
add.l Wort,a2
CopyZG2:
move.l a0,bltapth(a6)
move.l a1,bltbpth(a6)
move.l a2,bltcpth(a6)
move.l a2,bltdpth(a6)
move.l #$ffff00ff,bltafwm(a6)
move.w #92,bltamod(a6)
move.w #92,bltbmod(a6)
move.w #78,bltcmod(a6)
move.w #78,bltdmod(a6)
clr.w bltcon1(a6)
move.w #$0fca,bltcon0(a6)
move.w #9*64+1,bltsize(a6)
BltZG2:
btst #14,dmaconr(a6)
bne.s BltZG2
add.l #846,a1
add.l #M_bs,a2
dbra d7,CopyZG2
bra.w Naechster
; --------------------------------------------
; --- Zahl 1 ungerade; Zahl 2 ist ungerade ---
; --------------------------------------------
Zahl2Ungerade1:
move.l d0,FontOffset2
lea $dff000,a6
move.w #1,d7
lea Font,a0
move.l Destin,a1
add.l FontOffset2,a0
add.l Wort,a1
CopyZG3:
move.l a0,bltapth(a6)
move.l a1,bltdpth(a6)
move.l #$ffffff00,bltafwm(a6)
move.w #92,bltamod(a6)
move.w #78,bltdmod(a6)
clr.w bltcon1(a6)
move.w #$09f0,bltcon0(a6)
move.w #9*64+1,bltsize(a6)
BltZG3:
btst #14,dmaconr(a6)
bne.s BltZG3
add.l #846,a0
add.l #M_bs,a1
dbra d7,CopyZG3
; --------------------------------------------
move.l d1,FontOffset2
lea $dff000,a6
move.w #1,d7
lea Font2,a0
lea Font,a1
move.l Destin,a2
add.l FontOffset2,a0
add.l FontOffset2,a1
add.l Wort,a2
CopyZG4:
move.l a0,bltapth(a6)
move.l a1,bltbpth(a6)
move.l a2,bltcpth(a6)
move.l a2,bltdpth(a6)
move.l #$ffffff00,bltafwm(a6)
move.w #92,bltamod(a6)
move.w #92,bltbmod(a6)
move.w #78,bltcmod(a6)
move.w #78,bltdmod(a6)
move.w #$8000,bltcon1(a6)
move.w #$8fca,bltcon0(a6)
move.w #9*64+1,bltsize(a6)
BltZG4:
btst #14,dmaconr(a6)
bne.s BltZG4
add.l #846,a1
add.l #M_bs,a2
dbra d7,CopyZG4
bra.w Naechster
; ----------------------------------------------------------------
; ----------------------------------------------------------------
; --- Zahl 1 ist gerade ------------------------------------------
; ----------------------------------------------------------------
; ----------------------------------------------------------------
Zahl1Gerade:
move.l d1,d2
divu #2,d2
swap d2
and.l #$0000ffff,d2
tst.w d2
bne.w Zahl2Gerade2
beq.w Zahl2Ungerade2
; --------------------------------------------
; --- Zahl 2 gerade; Zahl 2 ist ungerade -----
; --------------------------------------------
Zahl2Ungerade2:
move.l d0,FontOffset2
lea $dff000,a6
move.w #1,d7
lea Font2,a0
lea Font,a1
move.l Destin,a2
add.l FontOffset2,a0
add.l FontOffset2,a1
add.l Wort,a2
sub.l #80,a2
CopyZG7:
move.l a0,bltapth(a6)
move.l a1,bltbpth(a6)
move.l a2,bltcpth(a6)
move.l a2,bltdpth(a6)
move.l #$ffff00ff,bltafwm(a6)
move.w #92,bltamod(a6)
move.w #92,bltbmod(a6)
move.w #78,bltcmod(a6)
move.w #78,bltdmod(a6)
move.w #$8000,bltcon1(a6)
move.w #$8fca,bltcon0(a6)
move.w #9*64+1,bltsize(a6)
BltZG7:
btst #14,dmaconr(a6)
bne.s BltZG7
add.l #846,a1
add.l #M_bs,a2
dbra d7,CopyZG7
; --------------------------------------------
move.l d1,FontOffset2
lea $dff000,a6
move.w #1,d7
lea Font2,a0
lea Font,a1
move.l Destin,a2
add.l FontOffset2,a0
add.l FontOffset2,a1
add.l Wort,a2
; sub.l #80,a2
; add.l #640,a2
CopyZG8:
move.l a0,bltapth(a6)
move.l a1,bltbpth(a6)
move.l a2,bltcpth(a6)
move.l a2,bltdpth(a6)
move.l #$ffffff00,bltafwm(a6)
move.w #92,bltamod(a6)
move.w #92,bltbmod(a6)
move.w #78,bltcmod(a6)
move.w #78,bltdmod(a6)
move.w #$8000,bltcon1(a6)
move.w #$8fca,bltcon0(a6)
move.w #9*64+1,bltsize(a6)
BltZG8:
btst #14,dmaconr(a6)
bne.s BltZG8
add.l #846,a1
add.l #M_bs,a2
dbra d7,CopyZG8
bra.w Naechster
; --------------------------------------------
; --- Zahl 1 gerade; Zahl 2 ist gerade -------
; --------------------------------------------
Zahl2Gerade2:
move.l d1,FontOffset2
lea $dff000,a6
move.w #1,d7
lea Font,a0
move.l Destin,a1
add.l FontOffset2,a0
add.l Wort,a1
CopyZG5:
move.l a0,bltapth(a6)
move.l a1,bltdpth(a6)
move.l #$ffff00ff,bltafwm(a6)
move.w #92,bltamod(a6)
move.w #78,bltdmod(a6)
clr.w bltcon1(a6)
move.w #$09f0,bltcon0(a6)
move.w #9*64+1,bltsize(a6)
BltZG5:
btst #14,dmaconr(a6)
bne.s BltZG5
add.l #846,a0
add.l #M_bs,a1
dbra d7,CopyZG5
; --------------------------------------------
move.l d0,FontOffset2
lea $dff000,a6
move.w #1,d7
lea Font2,a0
lea Font,a1
move.l Destin,a2
add.l FontOffset2,a0
add.l FontOffset2,a1
add.l Wort,a2
sub.l #80,a2
CopyZG6:
move.l a0,bltapth(a6)
move.l a1,bltbpth(a6)
move.l a2,bltcpth(a6)
move.l a2,bltdpth(a6)
move.l #$ffff00ff,bltafwm(a6)
move.w #92,bltamod(a6)
move.w #92,bltbmod(a6)
move.w #78,bltcmod(a6)
move.w #78,bltdmod(a6)
move.w #$8000,bltcon1(a6)
move.w #$8fca,bltcon0(a6)
move.w #9*64+1,bltsize(a6)
BltZG6:
btst #14,dmaconr(a6)
bne.s BltZG6
add.l #846,a1
add.l #M_bs,a2
dbra d7,CopyZG6
bra.w Naechster
Fertig:
move.l Wort,MerkEnde
move.l #00,AddBitPl
rts
; ----------------------------------------------------------------
FontOffset: dc.l 0
; ----------------------------------------------------------------
Wort: dc.l 0
Double: dc.b 0
even
; ----------------------------------------------------------------
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
; --------------------------
Time_Count: dc.l 0
Sek: dc.l 0
Min: dc.l 0
EZ: dc.l 0
ZZ: dc.l 0
; --------------------------
;--------------------------------------------------------
;--- Zeit ausrechnen und ins Menu kopieren --------------
;--------------------------------------------------------
Time:
addq.l #1,Time_Count
cmp.l #50,Time_Count
beq.s Sekunde
rts
Sekunde:
move.l #0,Time_Count
add.l #1,Sek
cmp.l #60,Sek
beq.s Minute
bra.s Copy_Zeit
Minute:
sub.l #60,Sek
add.l #1,Min
cmp.l #60,Min
beq.s Stunde
bra.s Copy_Zeit
Stunde:
move.l #0,Min
bra.w Copy_Zeit
;---------------------------------------
;--- Sekunden umrechnen & kopieren -----
;---------------------------------------
Copy_Zeit:
move.l Sek,d0
divu #10,d0
move.w d0,d2
and.l #$0000ffff,d2
move.l d2,ZZ
swap d0
and.l #$0000ffff,d0
move.l d0,EZ
move.l #0,d1 ; EZ Sekunde
lea Menu,a0
add.l #4222,a0
lea Font2,a1
move.l #48,d1
add.l EZ,d1
sub.l #33,d1
add.l d1,a1
bsr.w Copy_Zahl
move.l #0,d1 ; ZZ Sekunde
lea Menu,a0
add.l #4221,a0
lea Font2,a1
move.l #48,d1
add.l ZZ,d1
sub.l #33,d1
add.l d1,a1
bsr.w Copy_Zahl
;---------------------------------------
;--- Doppelpunkt -----------------------
;---------------------------------------
move.l #0,d1 ; :
lea Menu,a0
add.l #4220,a0
lea Font2,a1
add.l #25,a1
bsr.w Copy_Zahl
;---------------------------------------
;--- Minuten umrechnen & kopieren ------
;---------------------------------------
move.l Min,d0
divu #10,d0
move.w d0,d2
and.l #$0000ffff,d2
move.l d2,ZZ
swap d0
and.l #$0000ffff,d0
move.l d0,EZ
move.l #0,d1 ; EZ Minute
lea Menu,a0
add.l #4219,a0
lea Font2,a1
move.l #48,d1
add.l EZ,d1
sub.l #33,d1
add.l d1,a1
bsr.s Copy_Zahl
move.l #0,d1 ; ZZ Minute
lea Menu,a0
add.l #4218,a0
lea Font2,a1
move.l #48,d1
add.l ZZ,d1
sub.l #33,d1
add.l d1,a1
bsr.s Copy_Zahl
rts
Copy_Zahl:
move.l #7,d6
Gush:
move.b (a1),(a0)
add.l #94,a1 ; Font Offset
add.l #80,a0 ; Screen Offset
dbra d6,Gush
rts
; -------------------------------------------------------------------
; --- MENU - Routine ------------------------------------------------
; -------------------------------------------------------------------
M_Breite = 640
M_Hoehe = 1200
M_Planes = 2
M_Farben = 4
M_bs = M_Breite/8*M_Hoehe
M_Farblaenge = M_Farben*2
; -------------------------------------------------------------------
; --- Initialisieren und Text in Bitplane schreiben -----------------
; -------------------------------------------------------------------
; -------------------------------------------------------------------
; --- Lesetext einblenden --------------------------------------------
; -------------------------------------------------------------------
EinBlenden:
lea M_ColorsX(pc),a0
lea M_ColorsY(pc),a2
Ein:
cmp.b #$a0,$dff006
bne.s Ein
addq.l #1,Blenden
cmp.l #8,Blenden
blt.s Ein
lea M_Colors(pc),a1 ; in Copperliste
add.l #2,a1
lea M_Balken(pc),a3
add.l #2,a3
move.l #0,Blenden
move.w #3,d7
Aendern:
move.w (a0)+,d0
cmp.w #-1,d0
beq.w Fertig1
move.w d0,(a1)
add.l #4,a1
move.w (a2)+,(a3)
add.l #8,a3
dbra d7,Aendern
bra.s Ein
Fertig1:
move.l #0,Blenden
rts
;øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
M_ColorsX: dc.w $000,$210,$100,$000 ;Hintergrund:
dc.w $000,$420,$300,$100 1.Spalte und 2.Block
dc.w $000,$640,$500,$300
dc.w $000,$860,$720,$510
dc.w $000,$a80,$940,$720
dc.w $000,$b90,$a50,$820
dc.w $000,$ca0,$b60,$930
dc.w $000,$ec0,$d80,$b40
dc.w -1,-1,-1
;øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
M_ColorsY: dc.w $001,$001,$000,$000
dc.w $003,$003,$001,$000
dc.w $005,$005,$002,$000
dc.w $007,$006,$003,$000
dc.w $019,$007,$003,$000
dc.w $02b,$008,$004,$000
dc.w $03d,$009,$004,$000
dc.w $04f,$00a,$005,$000
;øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
; -------------------------------------------------------------------
; --- Ausblenden ----------------------------------------------------
; -------------------------------------------------------------------
AusBlenden:
lea M_ColorsX2(pc),a0
lea M_ColorsY2(pc),a2
Aus:
cmp.b #$a0,$dff006
bne.s Aus
addq.l #1,Blenden
cmp.l #8,Blenden
blt.w Aus
lea M_Colors(pc),a1 ; in Copperliste
add.l #2,a1
lea M_Balken(pc),a3
add.l #2,a3
move.l #0,Blenden
move.w #3,d7
AendernA:
move.w (a0)+,d0
cmp.w #-1,d0
beq.s FertigA
move.w d0,(a1)
add.l #4,a1
move.w (a2)+,(a3)
add.l #8,a3
dbra d7,AendernA
bra.s Aus
FertigA:
move.l #0,Blenden
rts
;øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
M_ColorsX2:
dc.w $000,$ec0,$d80,$b40
dc.w $000,$ca0,$b60,$930
dc.w $000,$b90,$a50,$820
dc.w $000,$a80,$940,$720
dc.w $000,$860,$720,$510
dc.w $000,$640,$500,$300
dc.w $000,$420,$300,$100
dc.w $000,$000,$000,$000
dc.w -1,-1,-1
;øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
M_ColorsY2:
dc.w $04f,$00a,$005,$000
dc.w $03d,$009,$004,$000
dc.w $02b,$008,$004,$000
dc.w $019,$007,$003,$000
dc.w $007,$006,$003,$000
dc.w $005,$005,$002,$000
dc.w $003,$003,$001,$000
dc.w $000,$000,$000,$000
;øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
Blenden: dc.l 0
even
;øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
; -------------------------------------------------------------------
; --- Einblenden ----------------------------------------------------
; -------------------------------------------------------------------
EinBlendenText:
lea M_ColorsText(pc),a0
lea M_ColorsTextB(pc),a2
EinT:
cmp.b #$a0,$dff006
bne.s EinT
addq.l #1,Blenden
cmp.l #8,Blenden
blt.s EinT
lea M_Colors(pc),a1 ; in Copperliste
add.l #2,a1
lea M_Balken(pc),a3
add.l #2,a3
move.l #0,Blenden
move.w #3,d7
AendernT:
move.w (a0)+,d0
cmp.w #-1,d0
beq.w Fertig1T
move.w d0,(a1)
add.l #4,a1
move.w (a2)+,(a3)
add.l #8,a3
dbra d7,AendernT
bra.s EinT
Fertig1T:
move.l #0,Blenden
rts
;øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø ; Lesetext
M_ColorsText:
dc.w $000,$000,$000,$000
dc.w $000,$222,$222,$111
dc.w $001,$444,$333,$222
dc.w $111,$666,$444,$222
dc.w $112,$888,$555,$333
dc.w $112,$aaa,$666,$444
dc.w $223,$ccc,$888,$555
dc.w $223,$eee,$aaa,$666 ;0ec 0d8 0b4
dc.w -1,-1,-1
;øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
M_ColorsTextB:
dc.w $000,$000,$000,$000
dc.w $000,$000,$000,$000
dc.w $001,$001,$001,$001
dc.w $111,$111,$111,$111
dc.w $112,$112,$112,$112
dc.w $112,$112,$112,$112
dc.w $223,$223,$223,$223
dc.w $223,$223,$223,$223
;øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
; -------------------------------------------------------------------
; --- Lesetext ausblenden ------------------------------------------
; -------------------------------------------------------------------
AusBlendenText:
lea M_ColorsTextaus(pc),a0
lea M_ColorsTextausB(pc),a2
AusA:
cmp.b #$a0,$dff006
bne.s AusA
addq.l #1,Blenden
cmp.l #8,Blenden
blt.w AusA
lea M_Colors(pc),a1 ; in Copperliste
add.l #2,a1
lea M_Balken(pc),a3
add.l #2,a3
move.l #0,Blenden
move.w #3,d7
AendernAA:
move.w (a0)+,d0
cmp.w #-1,d0
beq.s FertigAA
move.w d0,(a1)
add.l #4,a1
move.w (a2)+,(a3)
add.l #8,a3
dbra d7,AendernAA
bra.s AusA
FertigAA:
move.l #0,Blenden
rts
;øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
M_ColorsTextaus:
dc.w $223,$eee,$aaa,$666 ;0ec 0d8 0b4
dc.w $223,$ccc,$888,$555
dc.w $112,$aaa,$666,$444
dc.w $112,$888,$555,$333
dc.w $111,$666,$444,$222
dc.w $001,$444,$333,$222
dc.w $000,$222,$222,$111
dc.w $000,$000,$000,$000
dc.w -1,-1,-1
;øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
M_ColorsTextausB:
dc.w $223,$223,$223,$223
dc.w $223,$223,$223,$223
dc.w $112,$112,$112,$112
dc.w $112,$112,$112,$112
dc.w $111,$111,$111,$111
dc.w $001,$001,$001,$001
dc.w $000,$000,$000,$000
dc.w $000,$000,$000,$000
M_Abfrage:
move.b $dff00a,d0
cmp.b #$4c,KeyCode
beq.w M_Up
cmp.b #$4d,KeyCode
beq.w M_Down
move.b Merky1,d1
move.b d0,MerkY1
cmp.b d0,d1
beq.s M_Rauf
blt.s M_Down
bgt.w M_Up
M_Rauf:
cmp.b #$5f,KeyCode
beq.w Waehlen
move.b #0,KeyCode
btst #6,$bfe001
beq.w Waehlen
bra.w Nicht_Menu
;øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
Waehlen:
jsr M_Gewaehlt
bra.w Nicht_Menu
M_Down:
subq.l #1,Delayer
cmp.l #1,Delayer
bgt.s M_Danach
move.l MerkEnde,d0
add.l #8800,d0
sub.l #13840,d0
move.l AddBitPl,d1
cmp.l d0,d1
bgt.w M_Danach
add.l #800,AddBitPl ;
move.l #Screen,d0
bsr M_init_bitplanes
bset #0,SubAdd
bsr.s Suicid
move.l #15,Delayer
M_Danach:
bclr #0,KeyFl
move.b #0,KeyCode
bra.w M_Rauf
;øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
Delayer: dc.l 0
;-------
M_Up:
subq.l #1,Delayer
cmp.l #1,Delayer
bgt.s M_DanachO
cmp.l #80,AddBitPl
blt.w M_DanachO
sub.l #800,AddBitPl ;
move.l #Screen,d0
bsr M_init_bitplanes
Nein:
bclr #0,SubAdd
bsr.s Suicid
move.l #15,Delayer
M_DanachO:
bclr #0,KeyFl
move.b #0,KeyCode
bra.w M_Rauf
;øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
Suicid:
lea Hl_Name(pc),a0
move.l #0,d0
move.l #0,d1
move.l #0,d2
move.b 6(a0),d0
move.b 7(a0),d1
move.b 8(a0),d2
sub.b #$30,d0
sub.b #$30,d1
sub.b #$30,d2
mulu #100,d0
mulu #10,d1
add.l d2,d0
add.l d1,d0
btst #0,SubAdd
beq.s S_Runter
bne.w S_Rauf
rts
S_Runter:
cmp.l #1,d0
beq.s MessyUnten
sub.l #1,d0
move.l d0,d4
divu #10,d4
swap d4
move.b d4,8(a0)
add.b #$30,8(a0)
swap d4
and.l #$0000ffff,d4
divu #10,d4
move.b d4,6(a0)
add.b #$30,6(a0)
swap d4
move.b d4,7(a0)
add.b #$30,7(a0)
Go_On2:
bsr.w Artikel_Zahl
rts
;-----------------------------------
MessyUnten:
move.l #312,Welche
jsr Copy_Message
; move.w #$0f0,$dff180
bset #0,NichtBL
bra.s Go_On2
;===================================
S_Rauf:
cmp.l AnzArt,d0
bgt.s MessyOben
add.l #1,d0
Init_Art:
lea Hl_Name(pc),a0
move.l d0,d4
divu #10,d4
swap d4
move.b d4,8(a0)
add.b #$30,8(a0)
swap d4
and.l #$0000ffff,d4
divu #10,d4
move.b d4,6(a0)
add.b #$30,6(a0)
swap d4
move.b d4,7(a0)
add.b #$30,7(a0)
Go_On1:
bsr.w Artikel_Zahl
rts
;-----------------------------------
MessyOben:
move.l #312,Welche
jsr Copy_Message
; move.w #$f00,$dff180
bset #0,NichtBL
bra.s Go_On1
;øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
Hl_Name: dc.b "Suicid000",0
even
NichtBL: dc.b 0
even
;øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
TextCount: dc.l 0
Position: dc.l 0
ScreenOffset: dc.l 0
AddBitPl: dc.l 0
FontOffset2: dc.l 0
MerkEnde: dc.l 0
NameCounter: dc.l 0
Schonfertig: dc.b 0
Wahl: dc.b 0
MenuUntenMaus: dc.b 0
even
;øøøøøøøøøøøøøøøøøøøøøøøøøø
M_Init_Bitplanes:
move.l #M_BitPlanes,a0
add.l AddBitPl,d0
move.w #M_Planes-1,d7
M_GFX_Loop:
add.l #6,a0 ; $E2 zuerst
move.w d0,(a0) ; Lo Wert
sub.l #4,a0 ; $e0 danach
swap d0 ; Swap
move.w d0,(a0) ; High Wert
add.l #6,a0 ; In Copperliste weiter
swap d0 ; Swap
add.l #M_bs,d0 ; Eine Bitplanes dazu
dbra d7,M_GFX_Loop ; Jump zurück
rts ; RTS
M_color1:
move.w #$180,d0 ; Wert der 1. Farbe
move.l #Fontend-M_farblaenge,a0 ; Adresse in Bilddaten
move.l #M_farbe,a1 ; Adresse in Copperliste
M_init: move.w (a0)+,d1 ; Farbcode
move.w d0,(a1)+
move.w d1,(a1)+
addq.w #2,d0
cmp.w #$188,d0 ; $1a0 = 16F. || $190 = 8F.
bne.s M_init
rts
; ----------------------------------------------------------------
; --- Abfrage der MausKoordinaten --------------------------------
; ----------------------------------------------------------------
Abfrage:
cmp.w #$8021,$dff00e
beq.w Keine_Kolli
addq.l #1,NSeite
cmp.w #241,SpriteY
blt.w AfterGd1
cmp.w #177,SpriteX ; Runter | 1
blt.w AfterGd1
cmp.w #206,SpriteX
bgt.w AfterGd1
cmp.w #271,SpriteY
blt.w Gedrueckt1
AfterGd1:
cmp.w #241,SpriteY
blt.w AfterGd2
cmp.w #217,SpriteX ; Rauf | 2
blt.w AfterGd2
cmp.w #246,SpriteX
bgt.w AfterGd2
cmp.w #271,SpriteY
blt.w Gedrueckt2
AfterGd2:
cmp.w #241,SpriteY
blt.w AfterGd3
cmp.w #257,SpriteX ; 3 links | 3
blt.w AfterGd3
cmp.w #286,SpriteX
bgt.w AfterGd3
cmp.w #271,SpriteY
blt.w Gedrueckt3
AfterGd3:
cmp.w #241,SpriteY
blt.w AfterGd4
cmp.w #297,SpriteX ; 1links | 4
blt.w AfterGd4
cmp.w #326,SpriteX
bgt.w AfterGd4
cmp.w #271,SpriteY
blt.w Gedrueckt4
AfterGd4:
cmp.w #241,SpriteY
blt.w AfterGd5
cmp.w #337,SpriteX ; 1 rechts | 5
blt.s AfterGd5
cmp.w #366,SpriteX
bgt.w AfterGd5
cmp.w #271,SpriteY
blt.w Gedrueckt5
AfterGd5:
cmp.w #241,SpriteY
blt.w AfterGd6
cmp.w #377,SpriteX ; 3 rechts | 6
blt.s AfterGd6
cmp.w #406,SpriteX
bgt.w AfterGd6
cmp.w #271,SpriteY
blt.w Gedrueckt6
AfterGd6:
cmp.w #241,SpriteY
blt.w AfterGd7
cmp.w #417,SpriteX ; Menu | 7
blt.s AfterGd7
cmp.w #447,SpriteX
bgt.w AfterGd7
cmp.w #271,SpriteY
blt.w Gedrueckt7
AfterGd7:
cmp.w #286,SpriteY ; Exit
blt.w AfterGd8
cmp.w #299,SpriteY ; Exit
bgt.w AfterGd8
cmp.w #150,SpriteX
blt.w Gedrueckt8
AfterGd8:
cmp.w #286,SpriteY ; Music On
blt.w AfterGd9
cmp.w #299,SpriteY
bgt.w AfterGd9
cmp.w #397,SpriteX
blt.w AfterGd9
cmp.w #419,SpriteX
blt.w Gedrueckt9
AfterGd9:
cmp.w #286,SpriteY ; Music Off
blt.w AfterGd10
cmp.w #299,SpriteY
bgt.w AfterGd10
cmp.w #425,SpriteX
blt.w AfterGd10
cmp.w #447,SpriteX
blt.w Gedrueckt10
AfterGd10:
After:
Keine_Kolli:
rts
; ----------------------------------------------------------------
; --- Was passiert wenn MT auf Grafik gedrückt ? -----------------
; ----------------------------------------------------------------
Gedrueckt1:
btst #6,$bfe001
bne.s Back1
move.l #12,BobOffset
bsr.w Put
move.l #0,Welche
bsr.w Copy_Message
bclr #0,SubAdd
bset #0,MGd_G
bset #0,MenuUntenMaus
jsr Suicid
Back1:
bra.w Keine_Kolli
; ------------------------------------
Gedrueckt2:
btst #6,$bfe001
bne.w Back2
move.l #22,BobOffset
bsr.w Put
move.l #24,Welche
bsr.w Copy_Message
bset #0,SubAdd
bset #0,MGd_G
bset #0,MenuUntenMaus
jsr Suicid
Back2:
bra.w Keine_Kolli
; ------------------------------------
Gedrueckt3:
btst #6,$bfe001
bne.s Back3
cmp.l #10,NSeite
blt.s Back3
move.l #32,BobOffset
bsr.w Put
move.l #48,Welche
bsr.w Copy_Message
move.l AddBitPl,d0
cmp.l #16000,d0
blt.s GanzO
sub.l #16000,AddBitPl
move.l #Screen,d0
bsr M_init_bitplanes
move.l #0,NSeite ; Wait
Back3:
bra.w AfterGd3
GanzO:
move.l #0,AddBitPl
move.l #Screen,d0
bsr M_init_bitplanes
bra.s Back3
; ------------------------------------
Gedrueckt4:
btst #6,$bfe001
bne.s Back4
move.l #42,BobOffset
bsr.w Put
move.l #72,Welche
bsr.w Copy_Message
move.l AddBitPl,d0
cmp.l #1,d0
blt.s Comment4
cmp.l #0,AddBitPl
blt.s Back4
sub.l #400,AddBitPl
move.l #Screen,d0
bsr M_init_bitplanes
Back4:
bra.w AfterGd4
Comment4:
move.l #336,Welche
bsr.w Copy_Message
move.l #00,AddBitPl
move.l #Screen,d0
bsr M_init_bitplanes
bra.s Back4
; ------------------------------------
Gedrueckt5:
btst #6,$bfe001
bne.s Back5
move.l #52,BobOffset
bsr.w Put
move.l #96,Welche
bsr.w Copy_Message
move.l AddBitPl,d0
move.l MerkEnde,d1
sub.l #16000,d1
cmp.l d1,d0
bgt.s Comment5
add.l #400,AddBitPl
move.l #Screen,d0
bsr M_init_bitplanes
Back5:
bra.w AfterGd5
Comment5:
move.l #360,Welche
bsr.w Copy_Message
bra.s Back5
; ------------------------------------
Gedrueckt6:
btst #6,$bfe001
bne.s Back6
cmp.l #10,NSeite
blt.s Back6
move.l #62,BobOffset
bsr.w Put
move.l #120,Welche
bsr.w Copy_Message
move.l MerkEnde,d0
cmp.l #16000,d0
blt.s Back6
move.l AddBitPl,d0
move.l MerkEnde,d1
sub.l #32000,d1
cmp.l d1,d0
bgt.s GanzU
add.l #16000,AddBitPl
move.l #Screen,d0
bsr M_init_bitplanes
move.l #0,NSeite
Back6:
bra.w AfterGd6
GanzU:
move.l MerkEnde,d0
sub.l #15600,d0
move.l d0,AddBitPl
move.l #Screen,d0
bsr M_init_bitplanes
; add.l #40,AddBitPl
bra.s Back6
; ------------------------------------
Gedrueckt7: ; Menu
btst #6,$bfe001
bne.w Back7
move.l #72,BobOffset
bsr.w Put
move.l #144,Welche
bsr.w Copy_Message
bset #1,MGd_G
bset #0,MenuUntenMaus
move.l #1,d0
bsr.w Init_Art
Back7:
bra.w Keine_Kolli
;---------------------------------------------------
;--- Wenn MENU Gadget gedrückt wird ----------------
;---------------------------------------------------
Make_Menu:
bsr.w AusblendenText
movem.l d0-d7/a0-a6,-(a7)
jsr ClearScreen
move.l #Text,Source
move.l #Screen,Destin
add.l #1920,Destin
jsr Write
movem.l (a7)+,d0-d7/a0-a6
move.l #00,AddBitPl
move.l #Screen,d0
bsr M_init_bitplanes
bsr.w Einblenden
bclr #0,Wahl ; Abfrage des Bitplanescrollings
; aktivieren
bset #0,MenuUntenMaus ; Mausabfrage unten ausschalten
move.l #0,NameCounter
bclr #1,MGd_G
rts
; ------------------------------------
Gedrueckt8:
btst #6,$bfe001
bne.s Back8
bset #0,MenuUntenMaus ; Maus sperren
move.l #168,Welche
bsr.w Copy_Message
move.l #0,d0
move.l #0,d1
bset #0,Aussteigen
Back8:
bra.w AfterGd8
; ------------------------------------
Gedrueckt9:
btst #6,$bfe001
bne.s Back9
move.l #0,OnOff
bsr.w Put_Music
bclr #0,Ismusic
move.l #192,Welche
bsr.w Copy_Message
Back9:
bra.w AfterGd9
; ------------------------------------
Gedrueckt10:
btst #6,$bfe001
bne.s Back10
move.l #224,OnOff
bsr.w Put_Music
bset #0,Ismusic
move.l #216,Welche
bsr.w Copy_Message
movem.l d0-d7/a0-a6,-(a7)
jsr mt_end
movem.l (a7)+,d0-d7/a0-a6
Back10:
bra.w AfterGd10
; ----------------------------------------------------------------
BobOffset: dc.l 0
Welche: dc.l 0
Messy_Rein: dc.l 0
Aussteigen: dc.b 0
IsMusic: dc.b 0
even
; ----------------------------------------------------------------
; ----------------------------------------------------------------
; ----------------------------------------------------------------
Copy_Message:
move.l #0,Messy_Rein
lea Menu,a0
add.l #4171,a0
lea Font2,a1
lea Messages(pc),a2
add.l Welche,a2
move.w #23,d7
Gosh:
move.l #0,d0
move.b (a2)+,d0
cmp.b #32,d0
beq.s Leer
AFterLeer:
sub.l #33,d0
add.l d0,a1
bsr.w Copy_Zahl
lea Menu,a0
add.l #4171,a0
addq.l #1,Messy_Rein
add.l Messy_Rein,a0
lea Font2,a1
dbra d7,Gosh
rts
Leer:
move.l #94,d0
bra.s AfterLeer
Messages:
dc.b "Hello! I am Derrel. "
dc.b "Cool it man. "
dc.b "Alcohol is our petrol! "
dc.b "Want new stuff eh ? "
dc.b "You re going down! "
dc.b "Beer is our elixier! "
dc.b "I like this menu !!! "
dc.b "SUCKER, LOOSER,...!!!!!!"
dc.b "Nice music, isn`t it? "
dc.b "Don`t turn it off !!! "
dc.b "Loading OK. " ; Messages + 240
dc.b "DISK ERROR! " ; Messages + 264
dc.b "Enjoy reading !!! " ; Messages + 288
dc.b "There`s no article left!" ; Messages + 312
dc.b "Fuck off, looser !!! " ; Messages + 336
dc.b "Didn`t ya check the end?" ; Messages + 360
dc.b " ",0
even
; ----------------------------------------------------------------
; --- Grafik über Position des MPoiner blitten -------------------
; ----------------------------------------------------------------
Put:
lea $dff000,a6
lea Drueber,a0
lea Menu,a1
add.l #240,a1
add.l BobOffset,a1
sub.l #12,BobOffset
add.l BobOffset,a0
move.w #3,d7
Wait:
btst #14,dmaconr(a6)
bne.s Wait
move.l #$ffffffff,bltafwm(a6)
move.w #62,bltamod(a6)
move.w #72,bltdmod(a6)
Go_on:
move.l a0,bltapth(a6)
move.l a1,bltdpth(a6)
clr.w bltcon1(a6)
move.w #$09f0,bltcon0(a6)
move.w #32*64+4,bltsize(a6)
Wait2:
btst #14,dmaconr(a6)
bne.s Wait2
add.l #2240,a0
add.l #bs,a1
dbra d7,Go_on
rts
; ----------------------------------------------------------------
; --- Textscreen löschen -----------------------------------------
; ----------------------------------------------------------------
ClearScreen:
lea Screen,a0
lea $dff000,a6
move.w #1,d7
move.l #$ffffffff,bltafwm(a6)
move.w #0,bltdmod(a6)
CS:
move.l a0,bltdpth(a6)
clr.w bltcon1(a6)
move.w #$0100,bltcon0(a6)
move.w #1000*64+40,bltsize(a6)
WaitCS:
btst #14,dmaconr(a6)
bne.s WaitCS
add.l #M_bs,a0
dbra d7,CS
;--------------------------------------
lea Screen,a0
add.l #80000,a0
lea $dff000,a6
move.w #1,d7
move.l #$ffffffff,bltafwm(a6)
move.w #0,bltdmod(a6)
CS1:
move.l a0,bltdpth(a6)
clr.w bltcon1(a6)
move.w #$0100,bltcon0(a6)
move.w #200*64+40,bltsize(a6)
WaitCS1:
btst #14,dmaconr(a6)
bne.s WaitCS1
add.l #M_bs,a0
dbra d7,CS1
rts
; ----------------------------------------------------------------
; --- Jedes Interrupt Kopie der Menugrafik in Screen blitten -----
; ----------------------------------------------------------------
Restaurieren:
lea $dff000,a6
lea SaveMenu,a0
lea Menu,a1
add.l #252,a1
add.l #252,a0
move.w #3,d7
Wait5:
btst #14,dmaconr(a6)
bne.s Wait5
move.l #$ffffffff,bltafwm(a6)
move.w #12,bltamod(a6)
move.w #12,bltdmod(a6)
Gon_on2:
move.l a0,bltapth(a6)
move.l a1,bltdpth(a6)
clr.w bltcon1(a6)
move.w #$09f0,bltcon0(a6)
move.w #32*64+34,bltsize(a6)
Wait6:
btst #14,dmaconr(a6)
bne.s Wait6
add.l #bs,a0
add.l #bs,a1
dbra d7,Gon_on2
rts
; ----------------------------------------------------------------
OnOff: dc.l 0
; ----------------------------------------------------------------
; ----------------------------------------------------------------
; --- Music on/off toggle hinblitten -----------------------------
; ----------------------------------------------------------------
Put_Music:
lea $dff000,a6
lea Music,a0
add.l OnOff,a0
lea Menu,a1
add.l #66,a1
add.l #3600,a1
add.l #240,a1
move.w #3,d7
Waitm:
btst #14,dmaconr(a6)
bne.s Waitm
move.l #$ffffffff,bltafwm(a6)
move.w #0,bltamod(a6)
move.w #66,bltdmod(a6)
Go_onm:
move.l a0,bltapth(a6)
move.l a1,bltdpth(a6)
clr.w bltcon1(a6)
move.w #$09f0,bltcon0(a6)
move.w #16*64+7,bltsize(a6)
Wait2m:
btst #14,dmaconr(a6)
bne.s Wait2m
add.l #448,a0
add.l #bs,a1
dbra d7,Go_onm
rts
; ----------------------------------------------------------------
SpriteY: dc.w 0
SpriteX: dc.w 0
Pointset: dc.l 12040
even
; ----------------------------------------------------------------
; --- Sprite-Mausabfrage -----------------------------------------
; ----------------------------------------------------------------
D_Mausabfrage:
; -------------------------------
; --- Rechts & Links ------------
; -------------------------------
move.l #0,d0
move.w $dff00a,d0
move.b MerkX,d1
move.b d0,MerkX
cmp.b d0,d1
blt.s Rechts
bgt.s Links
AfterRL:
; -------------------------------
; --- Oben & Unten --------------
; -------------------------------
move.b $dff00a,d0
move.b MerkY,d1
move.b d0,MerkY
cmp.b d0,d1
bgt.w Oben
blt.s Unten
AfterOU:
rts
;-------------------------------
MerkX: dc.b 0
MerkY: dc.b 0
MerkY1: dc.b 0
even
;-------------------------------
Oben:
cmp.w #237,SpriteY
blt.s Nix1
sub.w #1,SpriteY
Nix1:
bsr.s Put_Sprite
bra.s AfterOU
Unten:
cmp.w #299,SpriteY
bgt.s Nix2
add.w #1,SpriteY
Nix2:
bsr.s Put_Sprite
bra.s AfterOU
Rechts:
cmp.w #446,SpriteX
bgt.s Nix3
add.w #1,SpriteX
Nix3:
bsr.s Put_Sprite
bra.s AfterRL
Links:
cmp.w #129,SpriteX
blt.s Nix4
sub.w #1,SpriteX
Nix4:
bsr.s Put_Sprite
bra.s AfterRL
; -------------------------------------------------------------------
; --- Spritekoordinaten initialisieren ------------------------------
; -------------------------------------------------------------------
Put_Sprite:
move.w SpriteX,d0
move.w SpriteY,d1
move.w d1,d2
add.w #16,d2
lea SpriteData(pc),a0
move.b d1,(a0)
ror.w #1,d0
move.b d0,1(a0)
move.b d2,2(a0)
rol.w #1,d0
and.b #1,d0
btst #8,d1
beq.s Nicht_Erste
bset #2,d0
Nicht_Erste:
btst #8,d2
beq.s Nicht_Zweite
bset #1,d0
Nicht_Zweite:
move.b d0,3(a0)
rts
; ----------------------------------------------------------------
; --- Was ist das wohl ? -----------------------------------------
; ----------------------------------------------------------------
Copperliste:
dc.w $180,$000
; ----------------------------------------------------------------
Sprites:
dc.w $120,0,$122,0,$124,0,$126,0,$128,0,$12a,0,$12c,0,$12e,0
dc.w $130,0,$132,0,$134,0,$136,0,$138,0,$13a,0,$13c,0,$13e,0
; ----------------------------------------------------------------
dc.w $1d07,-2
dc.w $180,$008
dc.w $2007,-2
M_BitPlanes:
dc.w $e0,0,$e2,0 ; 1 Plane
dc.w $e4,0,$e6,0 ; 2 Planes
; dc.w $e8,0,$ea,0 ; 3 Planes
; dc.w $ec,0,$ee,0 ; 4 Planes
; dc.w $f0,0,$f2,0 ; 5 Planes
; --------------------------------------------------
dc.w $8e,$2081,$90,$e7c1,$92,$3c,$94,$d4 ;Spezialreg.
dc.w $108,0,$10a,0
dc.w $100,$a200 ; bplcon0
M_Colors:
dc.w $180,000,$182,000,$184,000,$186,000
dc.w $6e07,-2
M_Balken:
dc.w $180,$0
dc.w $6f07,-2
dc.w $180,$0
dc.w $7907,-2
dc.w $180,$0
dc.w $7a07,-2
dc.w $180,$0
; -------------------------------------------------------------------
; dc.w $e607,-2
; dc.w $180,$004 ;,$182,$0ca,$184,$0b6,$188,$093
; dc.w $e707,-2
; dc.w $180,$003 ;,$182,$0b9,$184,$0a5,$188,$082
; dc.w $e807,-2
; dc.w $180,$002 ;,$182,$0a8,$184,$094,$188,$072
; dc.w $e907,-2
; dc.w $180,$001 ;,$182,$064,$184,$050,$188,$030
; dc.w $ea07,-2
; dc.w $180,$000 ;,$182,$042,$184,$030,$188,$010
dc.w $e807,-2
; dc.w $180,$008
; -------------------------------------------------------------------
dc.w $eb07,-2
BitPlanes:
dc.w $e0,0,$e2,0 ; 1 Plane
dc.w $e4,0,$e6,0 ; 2 Planes
dc.w $e8,0,$ea,0 ; 3 Planes
dc.w $ec,0,$ee,0 ; 4 Planes
; dc.w $f0,0,$f2,0 ; 5 Planes
; --------------------------------------------------
Farbe:
blk.w 32,0
; --------------------------------------------------
dc.w $8e,$ec81,$90,$2fc1,$92,$3c,$94,$d4 ;Spezialreg.
dc.w $108,0,$10a,0
dc.w $100,$C200 ; bplcon0
dc.w $180,0
dc.w $102,$00
dc.w $1a0,$000
dc.w $1a2,$00a
dc.w $1a4,$006
dc.w $1a6,$00f
dc.w $ffe1,-2
dc.w $2007,-2
dc.w $180,$000
dc.w $182,$bbb
dc.w $ffff,-2
; -------------------------------------------------------------------
M_Farbe:
blk.w 8,0
; -------------------------------------------------------------------
; -------------------------------------------------------------------
; --- Bitplanes des Mauspointers ------------------------------------
; -------------------------------------------------------------------
SpriteData:
dc.w $a05a,$b000
dc.w %1111111111111111,%1111111111111111
dc.w %0111111111111110,%1000000000000000
dc.w %0111111111111100,%1000000000000000
dc.w %0111111111111000,%1000000000000000
dc.w %0111111111110000,%1000000000000000
dc.w %0111111111100000,%1000000000100000
dc.w %0111111111110000,%1000000000010000
dc.w %0111111111111000,%1000000000001000
dc.w %0111111111111100,%1000000000000100
dc.w %0111111111111100,%1000000000000000
dc.w %0111101111111000,%1000010000000000
dc.w %0111100111110000,%1000001000000000
dc.w %0111000011100000,%1000000100000000
dc.w %0110000001000000,%1000000010000000
dc.w %0100000000000000,%1000000000000000
dc.w %0000000000000000,%0000000000000000
dc.w 0,0
; -------------------------------------------------------------------
; --- Screen in Copperliste eintragen -------------------------------
; -------------------------------------------------------------------
Init_Bitplanes:
move.l #BitPlanes,a0
move.l #Menu,d0
move.w #Planes-1,d7
GFX_Loop:
add.l #6,a0 ; $E2 zuerst
move.w d0,(a0) ; Lo Wert
sub.l #4,a0 ; $e0 danach
swap d0 ; Swap
move.w d0,(a0) ; High Wert
add.l #6,a0 ; In Copperliste weiter
swap d0 ; Swap
add.l #bs,d0 ; Eine Bitplanes dazu
dbra d7,GFX_Loop ; Jump zurück
rts ; RTS
; -------------------------------------------------------------------
; --- Farben initialisieren -----------------------------------------
; -------------------------------------------------------------------
color1:
move.w #$180,d0 ; Wert der 1. Farbe
move.l #MenuEnd-farblaenge,a0 ; Adresse in Bilddaten
move.l #farbe,a1 ; Adresse in Copperliste
init: move.w (a0)+,d1 ; Farbcode
move.w d0,(a1)+
move.w d1,(a1)+
addq.w #2,d0
cmp.w #$1a0,d0 ; $1a0 = 16F. || $190 = 8F.
bne.s init
rts
even
;-------------------------------------------
;----- Soundtracker V2.4 - playroutine -----
;-------------------------------------------
; call 'mt_init' to initialize the playroutine
mt_init:lea mt_data,a0
add.l #$03b8,a0
moveq #$7f,d0
moveq #0,d1
mt_init1:
move.l d1,d2
subq.w #1,d0
mt_init2:
move.b (a0)+,d1
cmp.b d2,d1
bgt.s mt_init1
dbf d0,mt_init2
addq.b #1,d2
mt_init3:
lea mt_data,a0
lea mt_sample1(pc),a1
asl.l #8,d2
asl.l #2,d2
add.l #$438,d2
add.l a0,d2
moveq #$1e,d0
mt_init4:
move.l d2,(a1)+
moveq #0,d1
move.w 42(a0),d1
asl.l #1,d1
add.l d1,d2
add.l #$1e,a0
dbf d0,mt_init4
lea mt_sample1(PC),a0
moveq #0,d0
mt_clear:
move.l (a0,d0.w),a1
clr.l (a1)
addq.w #4,d0
cmp.w #$7c,d0
bne.s mt_clear
clr.w $dff0a8
clr.w $dff0b8
clr.w $dff0c8
clr.w $dff0d8
clr.l mt_partnrplay
clr.l mt_partnote
clr.l mt_partpoint
move.b mt_data+$3b6,mt_maxpart+1
rts
; call 'mt_end' to switch the sound off
mt_end: clr.w $dff0a8
clr.w $dff0b8
clr.w $dff0c8
clr.w $dff0d8
move.w #$f,$dff096
rts
; the playroutine - call this every frame
mt_music:
addq.w #1,mt_counter
mt_cool:cmp.w #6,mt_counter
bne.s mt_notsix
clr.w mt_counter
bra mt_rout2
mt_notsix:
lea mt_aud1temp(PC),a6
tst.b 3(a6)
beq.s mt_arp1
lea $dff0a0,a5
bsr.s mt_arprout
mt_arp1:lea mt_aud2temp(PC),a6
tst.b 3(a6)
beq.s mt_arp2
lea $dff0b0,a5
bsr.s mt_arprout
mt_arp2:lea mt_aud3temp(PC),a6
tst.b 3(a6)
beq.s mt_arp3
lea $dff0c0,a5
bsr.s mt_arprout
mt_arp3:lea mt_aud4temp(PC),a6
tst.b 3(a6)
beq.s mt_arp4
lea $dff0d0,a5
bra.s mt_arprout
mt_arp4:rts
mt_arprout:
move.b 2(a6),d0
and.b #$0f,d0
tst.b d0
beq mt_arpegrt
cmp.b #$01,d0
beq.s mt_portup
cmp.b #$02,d0
beq.s mt_portdwn
cmp.b #$0a,d0
beq.s mt_volslide
rts
mt_portup:
moveq #0,d0
move.b 3(a6),d0
sub.w d0,22(a6)
cmp.w #$71,22(a6)
bpl.s mt_ok1
move.w #$71,22(a6)
mt_ok1: move.w 22(a6),6(a5)
rts
mt_portdwn:
moveq #0,d0
move.b 3(a6),d0
add.w d0,22(a6)
cmp.w #$538,22(a6)
bmi.s mt_ok2
move.w #$538,22(a6)
mt_ok2: move.w 22(a6),6(a5)
rts
mt_volslide:
moveq #0,d0
move.b 3(a6),d0
lsr.b #4,d0
tst.b d0
beq.s mt_voldwn
add.w d0,18(a6)
cmp.w #64,18(a6)
bmi.s mt_ok3
move.w #64,18(a6)
mt_ok3: move.w 18(a6),8(a5)
rts
mt_voldwn:
moveq #0,d0
move.b 3(a6),d0
and.b #$0f,d0
sub.w d0,18(a6)
bpl.s mt_ok4
clr.w 18(a6)
mt_ok4: move.w 18(a6),8(a5)
rts
mt_arpegrt:
move.w mt_counter(PC),d0
cmp.w #1,d0
beq.s mt_loop2
cmp.w #2,d0
beq.s mt_loop3
cmp.w #3,d0
beq.s mt_loop4
cmp.w #4,d0
beq.s mt_loop2
cmp.w #5,d0
beq.s mt_loop3
rts
mt_loop2:
moveq #0,d0
move.b 3(a6),d0
lsr.b #4,d0
bra.s mt_cont
mt_loop3:
moveq #$00,d0
move.b 3(a6),d0
and.b #$0f,d0
bra.s mt_cont
mt_loop4:
move.w 16(a6),d2
bra.s mt_endpart
mt_cont:
add.w d0,d0
moveq #0,d1
move.w 16(a6),d1
and.w #$fff,d1
lea mt_arpeggio(PC),a0
mt_loop5:
move.w (a0,d0),d2
cmp.w (a0),d1
beq.s mt_endpart
addq.l #2,a0
bra.s mt_loop5
mt_endpart:
move.w d2,6(a5)
rts
mt_rout2:
lea mt_data,a0
move.l a0,a3
add.l #$0c,a3
move.l a0,a2
add.l #$3b8,a2
add.l #$43c,a0
move.l mt_partnrplay(PC),d0
moveq #0,d1
move.b (a2,d0),d1
asl.l #8,d1
asl.l #2,d1
add.l mt_partnote(PC),d1
move.l d1,mt_partpoint
clr.w mt_dmacon
lea $dff0a0,a5
lea mt_aud1temp(PC),a6
bsr mt_playit
lea $dff0b0,a5
lea mt_aud2temp(PC),a6
bsr mt_playit
lea $dff0c0,a5
lea mt_aud3temp(PC),a6
bsr mt_playit
lea $dff0d0,a5
lea mt_aud4temp(PC),a6
bsr mt_playit
move.w #$01f4,d0
mt_rls: dbf d0,mt_rls
move.w #$8000,d0
or.w mt_dmacon,d0
move.w d0,$dff096
lea mt_aud4temp(PC),a6
cmp.w #1,14(a6)
bne.s mt_voice3
move.l 10(a6),$dff0d0
move.w #1,$dff0d4
mt_voice3:
lea mt_aud3temp(PC),a6
cmp.w #1,14(a6)
bne.s mt_voice2
move.l 10(a6),$dff0c0
move.w #1,$dff0c4
mt_voice2:
lea mt_aud2temp(PC),a6
cmp.w #1,14(a6)
bne.s mt_voice1
move.l 10(a6),$dff0b0
move.w #1,$dff0b4
mt_voice1:
lea mt_aud1temp(PC),a6
cmp.w #1,14(a6)
bne.s mt_voice0
move.l 10(a6),$dff0a0
move.w #1,$dff0a4
mt_voice0:
move.l mt_partnote(PC),d0
add.l #$10,d0
move.l d0,mt_partnote
cmp.l #$400,d0
bne.s mt_stop
mt_higher:
clr.l mt_partnote
addq.l #1,mt_partnrplay
moveq #0,d0
move.w mt_maxpart(PC),d0
move.l mt_partnrplay(PC),d1
cmp.l d0,d1
bne.s mt_stop
clr.l mt_partnrplay
mt_stop:tst.w mt_status
beq.s mt_stop2
clr.w mt_status
bra.s mt_higher
mt_stop2:
rts
mt_playit:
move.l (a0,d1.l),(a6)
addq.l #4,d1
moveq #0,d2
move.b 2(a6),d2
and.b #$f0,d2
lsr.b #4,d2
move.b (a6),d0
and.b #$f0,d0
or.b d0,d2
tst.b d2
beq.s mt_nosamplechange
moveq #0,d3
lea mt_samples(PC),a1
move.l d2,d4
asl.l #2,d2
mulu #$1e,d4
move.l (a1,d2),4(a6)
move.w (a3,d4.l),8(a6)
move.w 2(a3,d4.l),18(a6)
move.w 4(a3,d4.l),d3
tst.w d3
beq.s mt_displace
move.l 4(a6),d2
add.l d3,d2
move.l d2,4(a6)
move.l d2,10(a6)
move.w 6(a3,d4.l),8(a6)
move.w 6(a3,d4.l),14(a6)
move.w 18(a6),8(a5)
bra.s mt_nosamplechange
mt_displace:
move.l 4(a6),d2
add.l d3,d2
move.l d2,10(a6)
move.w 6(a3,d4.l),14(a6)
move.w 18(a6),8(a5)
mt_nosamplechange:
move.w (a6),d0
and.w #$fff,d0
tst.w d0
beq.s mt_retrout
move.w (a6),16(a6)
move.w 20(a6),$dff096
move.l 4(a6),(a5)
move.w 8(a6),4(a5)
move.w (a6),d0
and.w #$fff,d0
move.w d0,6(a5)
move.w 20(a6),d0
or.w d0,mt_dmacon
mt_retrout:
tst.w (a6)
beq.s mt_nonewper
move.w (a6),22(a6)
mt_nonewper:
move.b 2(a6),d0
and.b #$0f,d0
cmp.b #$0b,d0
beq.s mt_posjmp
cmp.b #$0c,d0
beq.s mt_setvol
cmp.b #$0d,d0
beq.s mt_break
cmp.b #$0e,d0
beq.s mt_setfil
cmp.b #$0f,d0
beq.s mt_setspeed
rts
mt_posjmp:
not.w mt_status
moveq #0,d0
move.b 3(a6),d0
subq.b #1,d0
move.l d0,mt_partnrplay
rts
mt_setvol:
move.b 3(a6),8(a5)
rts
mt_break:
not.w mt_status
rts
mt_setfil:
moveq #0,d0
move.b 3(a6),d0
and.b #1,d0
rol.b #1,d0
and.b #$fd,$bfe001
or.b d0,$bfe001
rts
mt_setspeed:
move.b 3(a6),d0
and.b #$0f,d0
beq.s mt_back
clr.w mt_counter
move.b d0,mt_cool+3
mt_back:rts
mt_aud1temp:
blk.w 10,0
dc.w 1
blk.w 2,0
mt_aud2temp:
blk.w 10,0
dc.w 2
blk.w 2,0
mt_aud3temp:
blk.w 10,0
dc.w 4
blk.w 2,0
mt_aud4temp:
blk.w 10,0
dc.w 8
blk.w 2,0
mt_partnote: dc.l 0
mt_partnrplay: dc.l 0
mt_counter: dc.w 0
mt_partpoint: dc.l 0
mt_samples: dc.l 0
mt_sample1: blk.l 31,0
mt_maxpart: dc.w 0
mt_dmacon: dc.w 0
mt_status: dc.w 0
mt_arpeggio:
dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c
dc.w $023a,$021a,$01fc,$01e0,$01c5,$01ac,$0194,$017d
dc.w $0168,$0153,$0140,$012e,$011d,$010d,$00fe,$00f0
dc.w $00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097
dc.w $008f,$0087,$007f,$0078,$0071,$0000,$0000,$0000
;------------------------------------------------------------------------------
;----- Kopf auf Track fahren --------------------------------------------------
;------------------------------------------------------------------------------
;--- jsr Dsk_start vor 1.Benutzung
;--- jsr Dsk_move Tracknr. in d0.b
;--- jsr Dsk_end nach letzter Benutzung
;------------------------------------------------------------------------------
HL_Drive = 0
HL_DskPt = $dff020
HL_DskLen = $dff024
HL_DskSync = $dff07e
HL_AdkCon = $dff09e
HL_AdkConr = $dff010
HL_DmaCon = $dff096
Dsk_start:
movem.l d0-d1,-(a7)
move.w #%1000000000010000,HL_DmaCon
move.w #%0001011100000000,HL_AdkCon ; Diskformatparameter setzen
move.w #%1001110100000000,HL_AdkCon
move.w #$4489,HL_DskSync
; Motor ein
bset #HL_Drive+3,$bfd100
bclr #7,$bfd100
bsr.w HL_sel
; Track 0 suchen
bset #1,$bfd100
clr.l d0
HL_Track:
move.w #$1000,d1 ; Seekdelay
HL_Track2:
dbra d1,HL_Track2
btst #4,$bfe001
beq.s HL_TrackEnd
bclr #0,$bfd100
nop
nop
bset #0,$bfd100
add.l #1,d0
bra.s HL_Track
HL_TrackEnd:
move.b d0,HL_oldcyl
move.b #0,HL_cyl
HL_rootfalsch:
move.w #880,d0 ; Rootblock laden
lea HL_root(PC),a1
bsr.w BL_Laden
cmp.l #1,HL_root+508 ; Rootblock wirklich geladen
beq.s HL_rootstimmt
move.b #99,HL_oldtrack
bra.s HL_rootfalsch
HL_rootstimmt:
movem.l (a7)+,d0-d1
rts
Dsk_move:
movem.l d0-d1,-(a7)
and.l #$ff,d0
move.b HL_cyl,d1
move.b d0,HL_cyl
bset #1,$bfd100
sub.b d0,d1
bpl.s HL_dm1
bclr #1,$bfd100
neg.b d1
HL_dm1:
tst.b d1
beq.s HL_dm3
move.w #$1000,d0
HL_dm2:
dbra d0,HL_dm2
bclr #0,$bfd100
nop
nop
bset #0,$bfd100
subq.b #1,d1
bra.s HL_dm1
HL_dm3:
movem.l (a7)+,d0-d1
rts
Dsk_end:
movem.l d0,-(a7)
move.b HL_oldcyl(PC),d0
bsr.b Dsk_move
bset #HL_Drive+3,$bfd100
bset #7,$bfd100
bclr #HL_Drive+3,$bfd100
movem.l (a7)+,d0
rts
HL_sel:
or.b #%01111000,$bfd100
bclr #HL_Drive+3,$bfd100
; btst #5,$bfe001
; HL_Waitready:
; bne.s HL_Waitready
rts
even
HL_Adkmerken: dc.w 0
HL_cyl: dc.b 0
HL_oldcyl: dc.b 0
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
;----- Track lesen ------------------------------------------------------------
;------------------------------------------------------------------------------
;--- jsr Tr_read a0 Puffer fuer Daten
;--- d0.b Head (0=unten)
;------------------------------------------------------------------------------
Tr_Drive = 0
Tr_DskPt = $dff020
Tr_DskLen = $dff024
Tr_DskSync = $dff07e
Tr_AdkCon = $dff09e
Tr_intreq = $dff09c
Tr_intreqr = $dff01e
Tr_MFMLen = 12774
Tr_read:
movem.l a0/d0-d1,-(a7)
btst #0,d0
bne.s Tr_unten
bset #2,$bfd100
bra.s Tr_head
Tr_unten:
bclr #2,$bfd100
Tr_head:
move.w #%0000000000000010,Tr_Intreq
move.l a0,Tr_DskPt
move.w #$0000,Tr_DskLen
move.w #(Tr_MFMLen)/2+$8000,d0 ; lesen
move.w d0,Tr_DskLen
move.w d0,Tr_DskLen
move.b $bfe801,d1
add.b #60,d1
Tr_WaitBlock:
move.w Tr_intreqr,d0
and.w #%0000000000000010,d0
bne.s Tr_ReadTrackOk
cmp.b $bfe801,d1
bpl.s Tr_WaitBlock
move.l #1,d0
bra.s Tr_ReadTrackEnd
Tr_ReadTrackOk:
move.l #0,d0
Tr_ReadTrackEnd:
move.w #$0000,Tr_DskLen
move.w #%0000000000000010,Tr_intreq
movem.l (a7)+,a0/d0-d1
rts
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
;----- Track MFM Dekodieren ---------------------------------------------------
;------------------------------------------------------------------------------
;--- jsr MFM_Decode a0 Codierte daten -------------------------------------
;--- a1 Decodierte Daten -----------------------------------
;--- d0.b Sector (0-10) ------------------------------------
;------------------------------------------------------------------------------
MFM_Decode:
movem.l a0-a2/d0-d2,-(a7)
cmp.w #$4489,(a0)
beq.s HL_zweisync
subq.l #2,a0
HL_zweisync:
subq.l #6,a0 ; 2 Worte $aaaa und 1 Sync nicht gelesen
move.w 10(a0),d1
move.w 14(a0),d2
and.w #$5555,d1
and.w #$5555,d2
lsl.w #1,d1
or.w d2,d1 ; Anz.Sekt. bis Gap in d1
move.w d1,d2
lsr.w #8,d2 ; Sektornr. in d2
cmp.b d2,d0
beq.w MFM_L1
bgt.s MFM_groesser
add.b #11,d0
MFM_groesser:
sub.b d2,d0
and.l #$ff,d0
cmp.b d0,d1
bgt.s HL_nixgap
beq.s HL_erstersec
sub.b d1,d0
and.l #$ff,d1
mulu #1088,d1
add.l d1,a0
HL_suchen2:
cmp.l #hl_raw+12774-1088,a0 ; falls Sync nicht gefunden
bne.s HL_gehtnoch2
move.l #$12345678,(a1)
movem.l (a7)+,a0-a1/d0-d2
rts
HL_gehtnoch2:
cmp.w #$4489,(a0)+
bne.s HL_suchen2
cmp.w #$4489,(a0)
beq.s HL_einer2
subq.l #2,a0
HL_einer2:
subq.l #6,a0
mulu #1088,d0
add.l d0,a0
bra.s MFM_L1
HL_nixgap:
mulu #1088,d0
add.l d0,a0
bra.s MFM_L1
HL_erstersec:
mulu #1088,d0
add.l d0,a0
HL_suchen:
cmp.l #hl_raw+12774-1088,a0 ; falls Sync nicht gefunden
bne.s HL_gehtnoch
move.l #$12345678,(a1)
movem.l (a7)+,a0-a1/d0-d2
rts
HL_gehtnoch:
cmp.w #$4489,(a0)+
bne.s HL_suchen
cmp.w #$4489,(a0)
beq.s HL_einer
subq.l #2,a0
HL_einer:
subq.l #6,a0
MFM_L1:
add.l #64,a0 ; Block dekodieren
move.l a0,a2
add.l #1024/2,a2
move.w #512/4,d3
MFM_DecodeL1:
move.l (a0)+,d1
move.l (a2)+,d2
and.l #$55555555,d1
and.l #$55555555,d2
lsl.l #1,d1
or.l d2,d1
move.l d1,(a1)+
dbra d3,MFM_DecodeL1
movem.l (a7)+,a0-a2/d0-d2
rts
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
;----- Block laden ------------------------------------------------------------
;------------------------------------------------------------------------------
;--- jsr BL_Laden d0.w Blocknr. -----------------------------------------
;------------------------------------------------------------------------------
BL_Laden:
movem.l d0-d4/a0-a1,-(a7)
ext.l d0
move.l d0,d1 ; Blocknr. in THS umrechnen
divu.w #22,d1 ;Track
move.l d1,d2
mulu.w #22,d2
sub.w d2,d0
cmp.b #10,d0
bgt.s HW_groesser
move.b #0,d2
bra.s HW_umrend
HW_groesser:
sub.b #11,d0
move.b #1,d2
HW_umrend:
move.b d0,d3
move.b HL_oldtrack,d4
cmp.b d1,d4
beq.s HL_nichtnochmal
move.b d1,HL_oldtrack
move.b d1,d0 ; Track
jsr Dsk_move
bra.s HL_muss
HL_nichtnochmal:
move.b HL_oldhead,d4
cmp.b d2,d4
beq.s HL_auchnicht
HL_muss:
move.b d2,HL_oldhead
lea HL_raw(PC),a0
move.b d2,d0 ; Head
jsr Tr_read
HL_auchnicht:
lea HL_raw(PC),a0 ; dec.Adr in a1!
move.b d3,d0 ; Sector
jsr MFM_Decode
movem.l (a7)+,d0-d4/a0-a1
movem.l d0-d1/a1,-(a7) ; fehlerfrei geladen ?
cmp.l #0,(a1)
beq.s HL_falsch
move.l #0,d1
move #127,d0
HL_plus:
add.l (a1)+,d1
dbra d0,HL_plus
tst.l d1
beq.s HL_richtig
HL_falsch:
movem.l (a7)+,d0-d1/a1
move.b #99,HL_oldtrack
bra.w BL_Laden
HL_richtig:
movem.l (a7)+,d0-d1/a1
rts
HL_oldtrack: dc.b 99
HL_oldhead: dc.b 99
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
;----- File laden -------------------------------------------------------------
;------------------------------------------------------------------------------
;--- jsr Fi_Laden Name ab HL_name: --------------------------------------
;------------------------------------------------------------------------------
Fi_laden:
movem.l d0-d5/a0-a2,-(a7)
move.l HL_dest,a2
bset #HL_Drive+3,$bfd100 ; Motor ein
bclr #7,$bfd100
bsr.w HL_sel
move.l #HL_namelength,d1 ; Hash berechnen
move.l #HL_Name,a1
move.w d1,d3
subq.l #1,d3
HL_loop:
mulu #13,d1
move.w #0,d2
move.b (a1)+,d2
cmp.b #"a",d2
blo.s HL_ok
cmp.b #"z",d2
bhi.s HL_ok
sub.b #32,d2
HL_ok:
add.w d2,d1
and.w #$7ff,d1
dbra d3,HL_loop
divu #72,d1
swap d1
addq.w #6,d1
and.l #$ffff,d1
lsl.l #2,d1
lea HL_root(PC),a0 ; 1.Block mit richtigem Hash
add.l d1,a0
move.l (a0),d0
tst.l d0
bne.s HL_gef
bset #0,Nicht_gefunden
bra.w HL_fend ; Datei nicht gefunden
HL_gef:
move.l a2,a1
bsr.w BL_Laden
cmp.l 4(a2),d0 ; richtiger Block ?
beq.s HL_ja1
move.b #99,HL_oldtrack
bra.s HL_gef
HL_ja1:
HL_v:
move.w #HL_namelength-1,d0 ; Kontrolle ob richtiger Header
lea HL_name(PC),a0
move.l a2,a1
add.l #433,a1
HL_vergleich:
move.b (a1)+,d1
cmp.b #"a",d1
blo.s HL_ok2
cmp.b #"z",d1
bhi.s HL_ok2
sub.b #32,d1
HL_ok2:
move.b (a0)+,d2
cmp.b #"a",d2
blo.s HL_ok3
cmp.b #"z",d2
bhi.s HL_ok3
sub.b #32,d2
HL_ok3:
cmp.b d1,d2
bne.s HL_wrongHe
dbra d0,HL_vergleich
bra.s HL_databfound
HL_wrongHe: ; naechsten Header versuchen
move.l 496(a2),d0
tst.l d0
bne.s HL_nochmehr
bset #0,Nicht_gefunden
bra.w HL_fend ; Datei nicht gefunden
HL_nochmehr:
move.l a2,a1
bsr.w BL_Laden
cmp.l 4(a2),d0 ; richtiger Block ?
beq.s HL_ja2
move.b #99,HL_oldtrack
bra.s HL_nochmehr
HL_ja2:
bra.s HL_v
HL_databfound:
move.l 4(a2),d4 ; Fileheaderblock
move.l #1,d5 ; Blocknr. der Datei
move.l 308(a2),d0
move.l a2,a1
HL_lade1:
bsr.w BL_Laden
cmp.l 4(a2),d4 ; richtiger Block ?
bne.s HL_nein1
cmp.l 8(a2),d5
bne.s HL_nein1
addq.l #1,d5
bra.s HL_ja3
HL_nein1:
move.b #99,HL_oldtrack
bra.s HL_lade1
HL_ja3:
move.l a2,a0
HL_nextblock:
move.l 16(a0),d2 ; Naechster Block
move.l 12(a0),d3 ; Anz.Bytes in Block
move.l a0,a1
add.l #24,a1
move.w #488-1,d0
HL_kopier:
move.b (a1)+,d1
btst #0,FCodieren
bne.s NichtFC1
ror.b #3,d1 ; Decodieren (nur bei Suicide-Artikeln)
NichtFC1:
move.b d1,(a0)+
dbra d0,HL_kopier
tst.l d2
bne.s HL_nocheiner
btst #0,FCodieren
bne.s NichtFC2
move.l #488,d2 ; Endmarkierung (nur bei Suicide-Artikeln)
sub.l d3,d2
sub.l d2,a0
move.b #$ff,(a0)+
move.b #$ff,(a0)+
move.b #$ff,(a0)+
move.b #$ff,(a0)+
NichtFC2:
bclr #0,Nicht_gefunden
bra.s HL_fend
HL_nocheiner:
move.l d2,d0
move.l a0,a1
HL_lade2:
bsr.w BL_Laden
cmp.l 4(a1),d4 ; richtiger Block ?
bne.s HL_nein2
cmp.l 8(a1),d5
bne.s HL_nein2
addq.l #1,d5
bra.s HL_nextblock
HL_nein2:
move.b #99,HL_oldtrack
bra.s HL_lade2
HL_fend:
bset #HL_Drive+3,$bfd100
bset #7,$bfd100
bclr #HL_Drive+3,$bfd100
movem.l (a7)+,d0-d5/a0-a2
rts
;------------------------------------------------------------------------------
FCodieren:
dc.b 0
even
HL_dest:
dc.l 0
HL_root:
blk.b 544,0
HL_raw:
blk.b 12774,0
HL_page:
; blk.b 1885,0
; dc.b -1,-1,-1,-1
blk.b 10500,$20
;>Extern "df0:Externs/Versuchstext1",HL_page,1885
even
Mt_data:
blk.b 91906,0
>extern "df0:Externs/Music",mt_Data,91906
;
; -------------------------------------------------------------------
; -------------------------------------------------------------------
AnzArt: dc.l 95 ; max. Anzahl minus 1
; -------------------------------------------------------------------
; --- Extern Files --------------------------------------------------
; -------------------------------------------------------------------
; --- Grafik für Menubalken unten -----
; -------------------------------------
Menu:
blk.b 21472,0
MenuEnd:
>extern "df0:Externs/Dmenu2.prev.RAW",Menu,21472
>extern "df0:Externs/Dmenu2.prev.RAW",SaveMenu,21472
; -------------------------------------------------------------------
; --- Grafik für aktivierte Gadgets ---
; -------------------------------------
Drueber:
blk.b 8992,0
>extern "df0:Externs/Dm.dueber2.RAW",Drueber,8992
; -------------------------------------------------------------------
; --- Platz für Kopie der Menugrafik --
; -------------------------------------
SaveMenu:
blk.b 21472,0
; -------------------------------------------------------------------
; --- Grafik für ON/OFF toggle --------
; -------------------------------------
Music:
blk.b 1824,0
>extern "df0:Externs/DmMusic2.RAW",Music,1824
; -------------------------------------------------------------------
Font:
blk.b 1700,0
Fontend:
>extern "df0:Externs/DMFont.RAW",Font,1700
; -------------------------------------------------------------------
Font2:
blk.b 752,0
>extern "df0:Externs/DMFont1Pl.RAW",Font2,752
; -------------------------------------------------------------------
Text:
blk.b 7511,0
dc.b -1,-1,-1,-1
>extern "df0:Externs/Menu",Text,7511
; -------------------------------------------------------------------
Screen:
blk.b 192000,$00
; -------------------------------------------------------------------
Grace: